package middleware

import (
	"fmt"
	"multi-cloud-manage/config"
	"multi-cloud-manage/utils"

	"github.com/gin-gonic/gin"
)

// 认证权限中间件
func JWTAuth() gin.HandlerFunc {
	return func(c *gin.Context) {
		// 从请求头部获取token
		tokenstring := c.GetHeader("Authorization")
		// 如果token为空，终止请求并返回json
		if tokenstring == "" {
			// c.Abort()终止请求
			c.AbortWithStatusJSON(401, gin.H{
				"code":    401,
				"message": "未提供token令牌",
			})
			return
		}
		// 解析token，是否有效
		claims, err := utils.ParseToken(tokenstring, config.GetConfig().Jwt.Secret)
		if err != nil {
			c.AbortWithStatusJSON(401, gin.H{
				"code":    401,
				"message": "无效的token令牌",
			})
			return
		}
		fmt.Println(claims)
		// 通过认证，保存userID和用户名username，往后执行
		c.Set("userID", claims.UserID)
		c.Set("username", claims.Username)
		c.Next()
	}
}
